package leecode

import "math"

// 计算字符 c1 到 c2 之间的距离
func distance(c1, c2 byte) int {
	diff := int(math.Abs(float64(c1 - c2)))
	return min(diff, 26-diff)
}

func getSmallestString(s string, k int) string {
	n := len(s)
	t := make([]byte, n)

	for i := 0; i < n; i++ {
		// 计算将当前字符修改为 'a' 的距离
		distToA := distance(s[i], 'a')

		// 如果当前距离小于等于 k，将 t[i] 设为 'a'，并更新 k
		if distToA <= k {
			t[i] = 'a'
			k -= distToA
		} else {
			// 否则，将 t[i] 设为 s[i] 往前移动 k 步后的字符
			t[i] = byte((int(s[i]-'a')-k+26)%26 + 'a')
			k = 0
		}
	}

	return string(t)
}
